home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / apt-mark < prev    next >
Text File  |  2009-10-15  |  3KB  |  84 lines

  1. #!/usr/bin/python
  2.  
  3. from optparse import OptionParser
  4.  
  5. try:
  6.     import apt_pkg
  7. except ImportError:
  8.     print "Error importing apt_pkg, is python-apt installed?"
  9.     
  10. import sys
  11. import os.path
  12.     
  13. actions = { "markauto" : 1,
  14.             "unmarkauto": 0
  15.           }
  16.  
  17. def show_automatic(filename):
  18.     if not os.path.exists(STATE_FILE):
  19.         return
  20.     auto = set()
  21.     tagfile = apt_pkg.ParseTagFile(open(STATE_FILE))
  22.     while tagfile.Step():
  23.         pkgname = tagfile.Section.get("Package")
  24.         autoInst = tagfile.Section.get("Auto-Installed")
  25.         if int(autoInst):
  26.             auto.add(pkgname)
  27.     print "\n".join(sorted(auto))
  28.     
  29.  
  30. def mark_unmark_automatic(filename, action, pkgs):
  31.     " mark or unmark automatic flag"
  32.     # open the statefile
  33.     if os.path.exists(STATE_FILE):
  34.         tagfile = apt_pkg.ParseTagFile(open(STATE_FILE))
  35.         outfile = open(STATE_FILE+".tmp","w")
  36.         while tagfile.Step():
  37.             pkgname = tagfile.Section.get("Package")
  38.             autoInst = tagfile.Section.get("Auto-Installed")
  39.             if pkgname in pkgs:
  40.                 if options.verbose:
  41.                     print "changing %s to %s" % (pkgname,action)
  42.                 newsec = apt_pkg.RewriteSection(tagfile.Section,
  43.                                        [],
  44.                                        [ ("Auto-Installed",str(action)) ]
  45.                                        )
  46.                 outfile.write(newsec+"\n")
  47.             else:
  48.                 outfile.write(str(tagfile.Section)+"\n")
  49.         # all done, rename the tmpfile
  50.         os.chmod(outfile.name, 0644)
  51.         os.rename(outfile.name, STATE_FILE)
  52.         os.chmod(STATE_FILE, 0644)
  53.  
  54.  
  55. if __name__ == "__main__":
  56.     apt_pkg.init()
  57.  
  58.     # option parsing
  59.     parser = OptionParser()
  60.     parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
  61.     parser.add_option("-f", "--file", action="store", type="string",
  62.                       dest="filename",
  63.                       help="read/write a different file")
  64.     parser.add_option("-v", "--verbose",
  65.                       action="store_true", dest="verbose", default=False,
  66.                       help="print verbose status messages to stdout")
  67.     (options, args) = parser.parse_args()
  68.  
  69.     # get the state-file
  70.     if not options.filename:
  71.         STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states"
  72.     else:
  73.         STATE_FILE=options.filename
  74.  
  75.     if args[0] == "showauto":
  76.         show_automatic(STATE_FILE)
  77.     else:
  78.         # get pkgs to change
  79.         if args[0] not in actions.keys():
  80.             parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
  81.         pkgs = args[1:]
  82.         action = actions[args[0]]
  83.         mark_unmark_automatic(STATE_FILE, action, pkgs)
  84.